home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / printing / prtset.arc / PRTSET.S < prev    next >
Internet Message Format  |  1989-03-31  |  7KB

  1. From @CORNELLC.ccs.cornell.edu:NTOMCZAK@UALTAVM Wed Mar 29 00:34:11 1989
  2. Received: from CORNELLC.ccs.cornell.edu ([128.253.1.19]) by ssyx.ucsc.edu (4.0/1.1)
  3.     id AA06846; Wed, 29 Mar 89 00:34:04 PST
  4. Message-Id: <8903290834.AA06846@ssyx.ucsc.edu>
  5. Received: from UALTAVM by CORNELLC.ccs.cornell.edu (IBM VM SMTP R1.2.1MX) with BSMTP id 0401; Wed, 29 Mar 89 03:33:47 EST
  6. Received: by UALTAVM (Mailer X1.25) id 6719; Wed, 29 Mar 89 01:32:37 MST
  7. Date:         Wed, 29 Mar 89 01:30:02 MST
  8. From: Michal Jaegermann <NTOMCZAK%UALTAVM.BITNET@CORNELLC.CIT.CORNELL.EDU>
  9. Subject:      Re:  prtset
  10. To: Steven Grimm <koreth@ssyx>
  11. In-Reply-To:  Your message of Tue, 28 Mar 89 21:58:33 PST
  12. Status: R
  13.  
  14.      Line noise was actually quite bad. :-).  Ok, here is the rest
  15. -------------------------------------------------------------------------
  16. Steve,
  17.  
  18.    I've already seen posted other parts of this mailing.  This file
  19. has to be the most persistently refusing to transfer which I ever
  20. seen. Hope that this clear ASCII text will get to you in more or less
  21. one piece.
  22.  
  23.    Regards,
  24.    Michal
  25.  
  26. ------- cut here ----------------
  27.  
  28. *****************************************************************
  29. *                                *
  30. *    prtset.s   version 1.1                     *
  31. *    Michal Jaegermann, September 1988                *
  32. *                                *
  33. *    this software is released to a public domain -        *
  34. *    enjoy every way you like                    *
  35. *                                                               *
  36. *****************************************************************
  37.  
  38. * character codes
  39. tab      equ   9
  40. lf       equ   10
  41. cr       equ   13
  42.  
  43. * gemdos & (x)bios equates
  44. gemdos   equ   1
  45. bios     equ   13
  46. xbios    equ   14
  47.  
  48. conin    equ   1
  49. conout     equ   2
  50. auxout     equ   4
  51. prnout   equ   5
  52. poutst     equ   $11
  53. aoutst   equ   $13
  54. cconws   equ   9
  55. pterm    equ   $4c
  56. setprt     equ   33
  57.  
  58.     .text
  59. init:
  60. *    move.w    #-1,d0        ; find current printer configuration
  61.     bsr    oldcnf
  62.     move.w    d0,prcnfg
  63.     move.w    #prnout,prdev
  64.     btst    #4,d0
  65.     beq.s    getarg
  66.     move.w    #auxout,prdev
  67. getarg:
  68.     move.l    4(sp),a6
  69.     adda.w    #$80,a6        ; a6 points to argument string start
  70.     moveq.l    #0,d0
  71.     move.b    (a6)+,d0    ; Get string length and
  72.     clr.b    (a6,d0.w)    ; ensure '\0' termination
  73.     sf    somearg
  74. nxtarg:
  75. skipwh:
  76.     bsr    getch
  77. testch:
  78.     tst.b    d0
  79.     beq    done        ; '\0' char is end of string
  80.     cmp.b    #' ',d0
  81.     beq    skipwh
  82.     cmp.b    #tab,d0
  83.     beq    skipwh
  84.     cmp.b    #'-',d0
  85.     beq    skipwh
  86. *
  87.     st    somearg
  88. opto:
  89.     cmp.b    #'O',d0
  90.     bne.s    optn
  91.     bsr    shwcnf
  92.     bra.s    nxtarg
  93. optn:
  94.     cmp.b    #'N',d0
  95.     bne.s    optc
  96.     bsr    newcnf
  97.     bra.s   nxtarg
  98. optc:
  99.     cmp.b    #'C',d0        ; using continuous paper
  100.     bne.s    opts
  101.     move.w    prcnfg,d0
  102.     bclr    #5,d0
  103.     bsr    prconf
  104.     bra.s    nxtarg
  105. opts:
  106.     cmp.b    #'S',d0        ; using single-sheet
  107.     bne.s    opthx
  108.     move.w    prcnfg,d0
  109.     bset    #5,d0
  110.     bsr    prconf
  111.     bra.s    nxtarg
  112.  
  113. opthx:
  114.     cmp.b    #'H',d0        ; hex escape
  115.     bne.s    usage
  116.     bsr    sendc        ; return code quietly ignored
  117.     bra.s    testch
  118. *
  119. done:
  120.     tst.b    somearg
  121.     beq.s    usage
  122.     move.w    #0,-(sp)    ; clear status
  123.     bra.s    term
  124. usage:
  125.     pea.l    usemsg        ; If error in arg string show usage message
  126.     move.w    #cconws,-(sp)
  127.     trap    #gemdos
  128.     addq.l    #6,sp
  129.     move.w  #conin,-(sp)    ; wait for keypress to mollify desktop
  130.     trap    #gemdos
  131. *    addq.l    #2,sp        ; conin code doubles as an error status
  132. *    move.w    #1,-(sp)    ; error status
  133. term:
  134.     move.w    #pterm,-(sp)
  135.     trap    #gemdos        ; and terminate
  136.  
  137. getch:
  138. *                ; return in d0 next character
  139. *                ; converting lower case to upper
  140. *                ; condition code set EQ if char is NULL
  141.     move.b    (a6)+,d0
  142.     cmp.b    #'a',d0
  143.     blt.s    gcrtn
  144.     cmp.b    #'z',d0
  145.     bgt.s    gcrtn
  146.     eori.b    #$20,d0        ; convert to uppercase
  147. gcrtn:
  148.     tst.b    d0        ; set condition codes
  149.     rts
  150.  
  151. *                ; set new printer configuration
  152. prconf:
  153.     move.w    d0,-(sp)
  154.     andi.w  #$3f,d0        ; only these bits meanigful
  155.     move.w  prcnfg,d1    ; do not change reserved bits
  156.     andi.w  #%0111111111000000,d1
  157.     or.w    d1,d0
  158.     move.w    #setprt,-(sp)
  159.     trap    #xbios
  160.     addq.l    #4,sp
  161. oldcnf:
  162.     moveq    #-1,d0        ; check printer configuration
  163.     move.w  d0,-(sp)
  164.     move.w    #setprt,-(sp)
  165.     trap    #xbios
  166.     addq.l    #4,sp
  167.     move.w    d0,prcnfg    ; store result in prcnfg
  168.     move.w    #prnout,prdev    ; assume printer on parallel port
  169.     btst    #4,d0        ; it this true?
  170.     beq.s    pcfret
  171.     move.w    #auxout,prdev   : no? - change output to aux
  172. pcfret:
  173.     rts
  174.  
  175. cvthx:
  176. *       converts ascii character in d0 into hex digit left in d0
  177. *       sets HI condition code iff character is not convertible
  178.  
  179.     subi.b    #'0',d0
  180.     cmpi.b    #9,d0
  181.     ble.s    cvret
  182.     subq.b    #7,d0        ; diff between '9' and 'A'
  183.     cmp.b    #$0f,d0
  184. cvret
  185.     rts
  186.  
  187. sendc:
  188. *     sends to a printer hex codes which follow option -h
  189. *     trailing single digit codes ok
  190. *     characters escaped with \ represent their own ascii codes
  191. *     string is terminated by any not escaped non-hex character
  192. *     and its remaining part skipped until blank is reached
  193. *     -- sendc returns the folowing info in register d1
  194. *        -1 - codes send succesfully
  195. *         0 - cannot send to output device
  196. *         1 - output device is off-line
  197. *
  198. *     Warning: lower case escaped characters will not work from
  199. *     a desktop, due to a brain damaged upper case conversion by GEM.
  200. *
  201. *            ; check if otput device is available
  202.     moveq    #1,d1
  203.     move.w    #poutst,-(sp)
  204.     cmpi.w  #prnout,prdev
  205.     beq.s    chkdv
  206.     addq.w  #2,(sp)  ; ask for status of rs232
  207. chkdv:
  208.     trap    #gemdos
  209.     addq.l    #2,sp
  210.     tst.w    d0
  211.     beq.s   skips
  212. sndnxt:
  213.     bsr    getch
  214.     beq.s    sret
  215.     moveq    #0,d1
  216.     cmp.b   #'\',d0
  217.     bne.s    cnvt1
  218.     move.b  (a6)+,d0
  219.     beq.s    sret
  220.     move.b    d0,d1
  221.     bra.s    print0
  222. cnvt1:
  223.     bsr.s    cvthx
  224.     bhi.s    skips
  225.     move.b    d0,d1
  226.     bsr    getch
  227.     bne.s    nxtcv
  228.     bsr    printc
  229.     moveq    #0,d0
  230.     bra.s    sret
  231. nxtcv:
  232.     bsr.s    cvthx
  233.     bhi.s    prnt1
  234.     lsl.b    #4,d1
  235.     add.b    d0,d1
  236. print0:
  237.     bsr    printc
  238.     beq.s    skips
  239.     bra.s    sndnxt
  240. prnt1:
  241.     bsr    printc
  242. skips:
  243.     bsr    getch
  244.     beq.s   sret
  245.     cmpi.b  #' ',d0
  246.     bne.s    skips
  247.     cmpi.b    #tab,d0
  248.     bne.s    skips
  249. sret:
  250.     rts
  251.  
  252. printc:
  253.     move.w  d1,-(sp)
  254.     move.w  prdev,-(sp)
  255.     trap    #gemdos
  256.     addq.l    #4,sp
  257.     move.w  d0,d1        ; move result flag to d1
  258.     rts
  259.  
  260. shwcnf:
  261.     move.w    prcnfg,d2
  262.     lsl.w   #8,d2
  263.     lsl.w   #2,d2
  264.     moveq    #5,d3
  265.     move.w  #'0',d4
  266. nxtbit:
  267.     move.w    d4,-(sp)
  268.     lsl.w    #1,d2
  269.     bcc.s    show
  270.     addq.w    #1,(sp)
  271. show:
  272.     move.w    #conout,-(sp)
  273.     trap    #gemdos
  274.     addq.l    #4,sp
  275.     dbra    d3,nxtbit
  276.     pea.l    retmsg
  277.     move.w    #cconws,-(sp)
  278.     trap    #gemdos
  279.     addq.l    #6,sp
  280.     rts
  281.  
  282. newcnf:
  283.     bsr    getch
  284.     beq.s    unget
  285.     bsr    cvthx
  286.     bhi.s    nret
  287.     move.b    d0,d1
  288.     bsr    getch
  289.     beq.s    unget
  290.     bsr    cvthx
  291.     bhi.s    nret
  292.     lsl.b    #4,d1
  293.     add.b    d0,d1
  294.     
  295.     move.w  d1,d0
  296.     bclr    #15,d0
  297.     bsr    prconf
  298. nret:
  299.     rts
  300. unget:
  301.     subq.l #1,a6    ; we will test terminator once again
  302.     rts
  303.     
  304.     .data
  305.  
  306. usemsg:    dc.b  'usage: prtset [-c|-s] [-o|-n<hex>] [-h<hex>]',cr,lf
  307.     dc.b  tab,'-c|-s',tab,'continuous | single-sheet',cr,lf
  308.     dc.b  tab,'-o|-n',tab,'old | new configuration',cr,lf
  309.     dc.b  tab,'-h<hex>',tab,'codes to send',cr,lf
  310.     dc.b  tab,tab,'where codes are hex or \escaped literals'
  311. retmsg:    dc.b  cr,lf,0
  312. somearg:
  313.     dc.b  0
  314.  
  315.     .even
  316.     .bss
  317. rpcnfg: ds.w  1
  318. prdev:  ds.w  1
  319.     end    
  320.  
  321.